/*
 * CarRadio.java
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * Sección 10
 * Carlos Alberto Solórzano Pineda (08832)
 * 11 de julio de 2011
 * Clase que simula un radio de automóvil, implementa la interfaz Radio
 */

public class CarRadio implements Radio {

	// Atributos
	private boolean on;				// True si la radio está encendida
	private boolean fa;				// True si está seleccionada FM
	private double station;				// Almacena el valor de la estación AM/FM
	// Objetos
	private double fmMemory[] = new double[12];		// Arreglo para almacenar en memoria estaciones de FM
	private double amMemory[] = new double[12];			// Arreglo para almacenar en memoria estaciones de AM
	
	// Métodos
	
	// Constructor predefinido
	public CarRadio() {
		on = false;
		fa = true;
		station = 87.9;
	}

	@Override
	/*
	 * Retorno: void
	 * Parámetros: no recibe
	 * Apaga o enciende la radio
	 */
	public void onoff() {
		on = !on;
	}

	@Override
	/*
	 * Retorno: void
	 * Parámetros: no recibe
	 * Cambia entre AM y FM
	 */
	public void change() {
		fa = !fa;
		if (fa){
			station = 87.9;
		}else {
			station = 530.0;
		}
	}

	@Override
	/*
	 * Retorno: void
	 * Parámetros: no recibe
	 * Avanza una estación en la radio (AM/FM)
	 */
	public void avanzar() {
		long a;
		a = (long)station;
		if (on){
			if (fa){
				if (station < 107.9){
					station = station + 0.20;
				}else {
					station = 87.9;
				}
			}else{
				if (station != 1610){
					station = a + 10.0;
				}else {
					station = 530.0;
				}
			}
		}
	}

	@Override
	/*
	 * Retorno: void
	 * Parámetros: no recibe
	 * Retrocede una estación en la radio (AM/FM)
	 */
	public void retroceder() {
		long a;
		a = (long)station;
		if (on){
			if (fa){
				if (station != 87.9){ 
					station = station - 0.2;
				}else{ 
					station = 107.9;
				}
			}else {
				if (station != 530.0) { 
					station = a - 10.0;	
				}else { 
					station = 1610.0;
				}
			}
		}
	}
	

	@Override
	/*
	 * Retorno: void
	 * Parámetros: int pos
	 * Guarda la emisora actual en memoria[pos]
	 */
	public void save(int pos) {
		if (fa){
			fmMemory[pos] = station;
		}else {
			amMemory[pos] = station;
		}
	}

	@Override
	/*
	 * Retorno: void
	 * Parámetros: int pos
	 * Cambia a la emisora guardada en memoria[pos]
	 */
	public void push(int pos) {
		if (fa) {
			if (fmMemory[pos] != 0){
				station = fmMemory[pos];
			}
		}else {
			if (amMemory[pos] != 0){
				station = amMemory[pos];
			}
		}
	}

	@Override
	/*
	 * Retorno: boolean
	 * Parámetros: no recibe
	 * Devuelve true si la radio está encendida
	 */
	public boolean getOn() {
		return on;
	}

	@Override
	/*
	 * Retorno: double
	 * Parámetros: no recibe
	 * Devuelve el valor de la emisora que se está escuchando
	 */
	public double getEmisora() {
		return station;
	}

	@Override
	/*
	 * Retorno: boolean
	 * Parámetros: no recibe
	 * Devuelve true si la radio está en FM
	 */
	public boolean getFM() {
		return fa;
	}


}
